﻿Imports ComponentFactory.Krypton.Toolkit
Imports System.Data.OleDb
Imports WiseLibraries.Net
Imports WiseLibraries.Strings
Imports System.Text

Public Class CadastroFornecedor
    Inherits KryptonForm
    Private dataset = dataset
    Private conexao As OleDbConnection
    Private command As OleDbCommand
    Private dataAdapter As OleDbDataAdapter
    Private fornecedor As Integer
    Private tipocadastro As String
    Private sb As StringBuilder
    Private camposErrados As ArrayList 'Para a validação
    Private colorCleaner As ComponentColorCleaner
    Private WebCEP As WebCEP

#Region "SQL comando"
    
#End Region
#Region "Atributos"
    Private nome As String = Nothing
    Private cnpj As String = Nothing
    Private inscricao As String = Nothing
    Private cidade As String = Nothing
    Private endereco As String = Nothing
    Private numeroend As String = Nothing
    Private complemento As String = Nothing
    Private bairro As String = Nothing
    Private logradouro As Integer = Nothing
    Private estado As Integer = Nothing
    Private cep As String = Nothing
    Private email As String = Nothing
    Private siteFornecedor As String = Nothing
    Private observacao As String = Nothing
    Private ramoatividade As Integer = Nothing
    Dim alteracoes As Boolean = False

#End Region

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Me.carregarEstados()
        Me.carregarRamo()
        Me.carregarLogradouros()
        tipocadastro = "novo"
        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)

        cbestado.Text = "SP"
        cblogradouro.Text = "Rua"
        cbramoAtiv.SelectedIndex = 0
    End Sub
    Sub New(ByVal fornecedor As Integer)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        Me.Text = "Wotan - Edição de cadastro de fornecedor"
        txtcnpj.Enabled = False
        Me.fornecedor = fornecedor
        Me.carregarEstados()
        Me.carregarRamo()
        Me.carregarLogradouros()

        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Open()
        command = New OleDbCommand("SELECT tblFornecedor.*, tblTipoLogradouro.descricaotipoLogradouro, tblEstado.siglaEstado FROM ((tblFornecedor INNER JOIN tblTipoLogradouro ON tblTipoLogradouro.codtipoLogradouro = tblFornecedor.codtipoLogradouro ) INNER JOIN tblEstado ON tblEstado.codEstado = tblFornecedor.codEstado) WHERE codFornecedor = " & fornecedor, conexao)
        Debug.WriteLine(command.CommandText)
        Dim dr As OleDbDataReader = command.ExecuteReader()

        dr.Read()

        If (dr("codFornecedor") = fornecedor) Then
            txtnomeempresa.Text = dr("nomeFornecedor")
            txtcnpj.Text = dr("cnpjFornecedor")
            txtinscestadual.Text = dr("inscricaoestadualFornecedor")
            txtcidade.Text = dr("cidadeFornecedor")
            txtendereco.Text = dr("enderecoFornecedor")
            txtnumero.Text = dr("numenderecoFornecedor")
            txtcomp.Text = If(dr("complementoFornecedor").Equals(DBNull.Value), Nothing, dr("complementoFornecedor"))
            txtbairro.Text = dr("bairroFornecedor")
            txtcep.Text = dr("cepFornecedor")
            txtemail.Text = dr("emailFornecedor")
            txtsite.Text = dr("siteFornecedor")
            txtobservacao.Text = If(dr("observacaoFornecedor").Equals(DBNull.Value), Nothing, dr("observacaoFornecedor"))
        End If
        dr.Close()
        command.CommandText = "SELECT * FROM tblTelefoneFornecedor WHERE codFornecedor = " & fornecedor
        dataAdapter = New OleDbDataAdapter(command)
        dataAdapter.Fill(dataset, "tblTelefoneFornecedor")

        For i = 0 To dataset.Tables("tblTelefoneFornecedor").Rows.Count - 1
            LBTelefone.Items.Add(dataset.Tables("tblTelefoneFornecedor").Rows(i).Item("numerotelefoneFornecedor"))
        Next
        Debug.WriteLine(command)

        conexao.Close()
        tipocadastro = "editar"
        btnlimpar.Visible = False
        btnsalvar.Left = btnlimpar.Left

        colorCleaner = New ComponentColorCleaner
        colorCleaner.add(Me.Controls, Assistente.COR_NORMAL)

    End Sub

    Private Sub CadastrarFornecedor()
        Dim tels(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            tels(i) = LBTelefone.Items(i)
        Next
        Dim sqlinsert As String = "INSERT INTO tblFornecedor(nomeFornecedor, cnpjFornecedor, inscricaoestadualFornecedor, cidadeFornecedor, enderecoFornecedor, numenderecoFornecedor, complementoFornecedor, bairroFornecedor, codtipoLogradouro, codEstado, cepFornecedor, emailFornecedor, siteFornecedor, observacaoFornecedor, codramoAtividade)" & _
        "VALUES('" & nome & "','" & cnpj & "','" & inscricao & "','" & cidade & "','" & endereco & "','" & numeroend & "','" & complemento & "','" & bairro & "'," & logradouro & "," & estado & ",'" & cep & "','" & email & "','" & siteFornecedor & "','" & observacao & "'," & ramoatividade & ")"

        Debug.WriteLine(sqlinsert)
        Try
            conexao.Open()
            command = New OleDbCommand(sqlinsert, conexao)
            command.ExecuteNonQuery()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
        End Try

        command.CommandText = "SELECT TOP 1 MAX(codFornecedor) AS 'ultimo' FROM tblFornecedor"
        dataAdapter.SelectCommand = command
        dataAdapter.Fill(dataset, "tblFornecedor")
        Dim ultimoCodigo As Integer = dataset.Tables("tblFornecedor").Rows(0).Item(0)
        Try
            For i = 0 To tels.Length - 1
                command.CommandText = "INSERT INTO tblTelefoneFornecedor (numerotelefoneFornecedor,codFornecedor)  VALUES ('" & _
                    tels(i) & "'," & _
                    ultimoCodigo & ")"
                command.ExecuteNonQuery()
            Next
        Catch ex As OleDbException
            Debug.WriteLine(ex.Message)
        End Try
        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Close()
    End Sub

    Private Sub verificarCampos()

        If (sb.Length > 0) Then
            Dim c() As Control
            c = camposErrados.ToArray(GetType(Control))
            Assistente.trocaCorCampos(c, Assistente.COR_ERRO)
            KryptonMessageBox.Show("Há erros nos seguintes campos:" & vbNewLine & sb.ToString() & vbNewLine & "Verifique e tente novamente.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub



    Private Function ValidarFornecedor() As Boolean
        Dim val As New RegexValidator()

        camposErrados = New ArrayList()
        sb = New StringBuilder()

        If Not (String.IsNullOrEmpty(txtnomeempresa.Text)) Then
            nome = txtnomeempresa.Text
        Else
            camposErrados.Add(txtnomeempresa)
            sb.Append("Nome Empresa" & vbNewLine)
        End If

        If (txtcnpj.MaskCompleted) Then
            cnpj = Assistente.removePontos(txtcnpj.Text)
        Else
            camposErrados.Add(txtcnpj)
            sb.Append("CNPJ" & vbNewLine)
        End If

        If (txtinscestadual.MaskCompleted) Then
            inscricao = Assistente.removePontos(txtinscestadual.Text)
        Else
            camposErrados.Add(txtinscestadual)
            sb.Append("Inscricao Estadual" & vbNewLine)
        End If

        If (txtcep.MaskCompleted) Then
            cep = Assistente.removePontos(txtcep.Text)
        Else
            camposErrados.Add(txtcep)
            sb.Append("CEP" & vbNewLine)
        End If

        If (cblogradouro.SelectedItem IsNot Nothing) Then
            logradouro = DirectCast(cblogradouro.SelectedItem, DataRowView).Item("codTipoLogradouro")
        Else
            camposErrados.Add(cblogradouro)
            sb.Append("Logradouro" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtendereco.Text)) Then
            endereco = txtendereco.Text
        Else
            camposErrados.Add(txtendereco)
            sb.Append("Endereco" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtnumero.Text)) Then
            numeroend = txtnumero.Text
            complemento = txtcomp.Text
        Else
            camposErrados.Add(txtnumero)
            sb.Append("Numero" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtcidade.Text)) Then
            cidade = txtcidade.Text
        Else
            camposErrados.Add(txtcidade)
            sb.Append("Cidade" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtbairro.Text)) Then
            bairro = txtbairro.Text
        Else
            camposErrados.Add(txtbairro)
            sb.Append("Bairro" & vbNewLine)
        End If

        If (cbestado.SelectedItem IsNot Nothing) Then
            estado = DirectCast(cbestado.SelectedItem, DataRowView).Item("codEstado")
        Else
            camposErrados.Add(cbestado)
            sb.Append("Estado" & vbNewLine)
        End If

        If (cbramoAtiv.SelectedItem IsNot Nothing) Then
            ramoatividade = DirectCast(cbramoAtiv.SelectedItem, DataRowView).Item("codramoAtividade")
            observacao = txtobservacao.Text
        Else
            camposErrados.Add(cbramoAtiv)
            sb.Append("Ramo Atividade" & vbNewLine)
        End If

        If Not (String.IsNullOrEmpty(txtemail.Text)) Then
            If (val.validateEmail(txtemail.Text)) Then
                email = txtemail.Text
                siteFornecedor = txtsite.Text
            Else
                camposErrados.Add(txtemail)
                sb.Append("Email" & vbNewLine)
            End If
        End If

        verificarCampos()

        If (sb.Length > 0) Then
            Return (False)
        Else
            Return (True)
        End If

    End Function
    Private Sub btncancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancelar.Click
        Me.Dispose()
    End Sub
    Private Sub btnlimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlimpar.Click
        Assistente.limparCampos(Me)
        Assistente.trocaCorTransition(Me)
        cbestado.Text = "SP"
        cblogradouro.Text = "Rua"
        cbramoAtiv.SelectedIndex = 0
    End Sub
    Private Sub carregarEstados()
        Try
            Dim strQueryEstado As String = "SELECT * FROM tblEstado"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQueryEstado, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataset = New DataSet()
            dataAdapter.Fill(dataset, "tblEstado")
            cbestado.DataSource = dataset.Tables("tblEstado")
            cbestado.DisplayMember = "siglaEstado"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub
    Private Sub carregarRamo()
        Try
            Dim strQueryRamo As String = "SELECT * FROM tblRamoAtividade"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQueryRamo, conexao)
            dataAdapter = New OleDbDataAdapter(command)

            dataAdapter.Fill(dataset, "tblRamoAtividade")
            cbramoAtiv.DataSource = dataset.Tables("tblRamoAtividade")
            cbramoAtiv.DisplayMember = "descricaoramoAtividade"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        End Try
    End Sub
    Private Sub carregarLogradouros()
        Try
            If (dataset.Tables("tblTipoLogradouro") IsNot Nothing) Then
                dataset.Tables("tblTipoLogradouro").Clear()
            End If
            Dim strQuerylogradouro As String = "SELECT * FROM tblTipoLogradouro"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strQuerylogradouro, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataAdapter.Fill(dataset, "tblTipoLogradouro")
            cblogradouro.DataSource = dataset.Tables("tblTipoLogradouro")
            cblogradouro.DisplayMember = "descricaoTipoLogradouro"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try
    End Sub

    Private Sub btnsalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsalvar.Click
        If (tipocadastro = "novo") Then
            If (ValidarFornecedor()) Then
                CadastrarFornecedor()
                KryptonMessageBox.Show("Fornecedor cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If
        ElseIf (tipocadastro = "editar") Then
            If (ValidarFornecedor()) Then
                AtualizarFornecedor()
                KryptonMessageBox.Show("Fornecedor atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If
        End If
    End Sub

    Private Sub btnaddRamo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaddRamo.Click
        Dim editor As New EditorDeTabelaSimples("Adicionar ou remover Ramos de Atividade" _
                                                , conexao _
                                                , "tblRamoAtividade" _
                                                , "descricaoRamoAtividade")
        editor.ShowDialog()

        cbRamoAtiv.DataBindings.Clear()
        cbRamoAtiv.DataSource = Nothing
        cbRamoAtiv.Refresh()

        carregarRamo()
    End Sub

    Private Sub AtualizarFornecedor()
        Try

            Dim sql = "UPDATE tblFornecedor SET nomeFornecedor = '" & nome & "', cnpjFornecedor= '" & cnpj & "', inscricaoestadualFornecedor = '" & inscricao & "', cidadeFornecedor = '" & cidade & "', enderecoFornecedor = '" & endereco & "', numenderecoFornecedor = '" & numeroend & "', complementoFornecedor = '" & complemento & "', bairroFornecedor = '" & bairro & "', codtipoLogradouro = " & logradouro & ", codEstado = " & estado & ", cepFornecedor= '" & cep & "', emailFornecedor ='" & email & "', siteFornecedor = '" & siteFornecedor & "', observacaoFornecedor = '" & observacao & "', codramoAtividade = " & ramoatividade & " WHERE codFornecedor = " & fornecedor
            Debug.WriteLine(sql)
            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()

        Catch ex As Exception

            Debug.WriteLine(ex)
        End Try
    End Sub

   
    Private Sub txtnomeempresa_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtnomeempresa.KeyPress
        ValidaLetras(txtnomeempresa, e)
    End Sub
    Private Sub ValidaNumero(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," Then
            e.Handled = True
        End If
    End Sub

    Private Sub ValidaLetras(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Not Char.IsLetter(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," And Not e.KeyChar = " " Then
            e.Handled = True
        End If
    End Sub

    Private Sub txtnumero_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtnumero.KeyPress
        ValidaNumero(txtnumero, e)
    End Sub

    Private Sub txtcidade_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtcidade.KeyPress
        ValidaLetras(txtcidade, e)
    End Sub

    Private Sub btnAdicionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdicionar.Click
        Dim t As String = txtTelefone.Text

        'Transforma os itens do listBox em um vetor string
        Dim itens(LBTelefone.Items.Count - 1) As String
        For i = 0 To LBTelefone.Items.Count - 1
            itens(i) = LBTelefone.Items(i).ToString()
        Next

        'Verifica se é um número de telefone completo e se ainda não existe na lista
        If (txtTelefone.MaskCompleted) Then
            If Not (Assistente.verificarExistencia(t, itens)) Then
                LBTelefone.Items.Add(txtTelefone.Text)
                alteracoes = True

                txtTelefone.Clear()
                txtTelefone.Focus()
            Else
                KryptonMessageBox.Show("O telefone digitado já existe na lista.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Else
            KryptonMessageBox.Show("Você deve digitar o telefone por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click
        If (LBTelefone.SelectedItem IsNot Nothing) Then
            LBTelefone.Items.Remove(LBTelefone.SelectedItem)
        End If
    End Sub

    Private Sub cbestado_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbestado.SelectedIndexChanged
        If (cbestado.SelectedItem IsNot Nothing) Then
            txtinscestadual.Mask = InscricaoEstadual.criarMascara(dataset.Tables("tblEstado").Rows(cbestado.SelectedIndex).Item("siglaEstado"))
        End If
    End Sub

    Private Sub btncompletarendereco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompletarEndereco.Click
        If (txtcep.MaskCompleted) Then

            WebCEP = New WebCEP(txtcep.Text)

            'Se encontrar o cep, preencha os campos
            If (WebCEP.Resultado = 1) Then
                txtendereco.Text = WebCEP.Logradouro
                cblogradouro.Text = WebCEP.TipoLogradouro
                txtbairro.Text = WebCEP.Bairro
                txtcidade.Text = WebCEP.Cidade
                cbestado.Text = WebCEP.UF.ToUpper

            Else
                'Caso contrário, avise
                KryptonMessageBox.Show("Não foi possível encontrar o CEP.", "Ops", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If

        Else
            'Se o cep digitado for incompleto
            KryptonMessageBox.Show("Você deve digitar o CEP por completo.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub
End Class